package top.v5it.japi.ddd.core.dao.impl.wrapper;

import cn.hutool.core.lang.func.Func1;

/**
 * 列包装
 *
 * @param <T> 实体类型
 * @param <W> 子类类型，用于方法链式调用
 * @date 2023/4/3
 */
public class ColumnWrapper<T, W extends ColumnWrapper<T, W>> extends QueryConditionWrapper<T, W> {

    protected ColumnWrapper(T entity) {
        super(entity);
    }

    /**
     * 添加列
     *
     * @param column 列名
     * @return 当前实例
     */
    public W column(String column) {
        addColumnSegment(String.format("`%s`", column));
        return wrapper;
    }

    /**
     * 添加列
     *
     * @param columnFunc 列的获取函数
     * @return 当前实例
     */
    public W column(Func1<T, ?> columnFunc) {
        return this.column(this.mapper(columnFunc));
    }

}
